Even modern design methodologies and state of the art implementation tools, e.g. integrated development environments (IDE), static analysis tools and compilers, usually cannot assure the functional correctness of applications except for very small fragments. State of the art applications have considerable size which makes static program analysis of the complete system impossible. This means that the inevitable defects in the applications have to be found dynamically, e.g., when the application is executed. A popular state of the art method for finding and eliminating defects in applications is debugging.
Debugging is usually done locally, e.g., the debugger and the debugged application (debuggee) run on the same system or in a network with very low latency. The debuggee is usually the Java Virtual Machine (VM) which needs to get debugged—the debugger is the process being responsible for providing debugging information to an application programmer and controlling the whole debugging run. In Java, there is a standardized debugging data protocol spoken between the debugger and the debuggee. This is the so-called Java Debug Wire Protocol (JDWP).